package date_202404

import "strings"

//125. 验证回文串
//简单
//相关标签
//相关企业
//如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后，短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
//
//字母和数字都属于字母数字字符。
//
//给你一个字符串 s，如果它是 回文串 ，返回 true ；否则，返回 false 。
//
//
//
//示例 1：
//
//输入: s = "A man, a plan, a canal: Panama"
//输出：true
//解释："amanaplanacanalpanama" 是回文串。
//示例 2：
//
//输入：s = "race a car"
//输出：false
//解释："raceacar" 不是回文串。
//示例 3：
//
//输入：s = " "
//输出：true
//解释：在移除非字母数字字符之后，s 是一个空字符串 "" 。
//由于空字符串正着反着读都一样，所以是回文串。
//
//
//提示：
//
//1 <= s.length <= 2 * 105
//s 仅由可打印的 ASCII 字符组成

func isPalindrome(s string) bool {

	charStr := ""
	for i := 0; i < len(s); i++ {
		if int(s[i])-'a' >= 0 && s[i]-'a' <= 25 {
			charStr = charStr + string(s[i])
		} else if int(s[i])-'A' >= 0 && s[i]-'A' <= 25 {
			charStr = charStr + string(s[i])
		} else if int(s[i])-'0' >= 0 && s[i]-'0' <= 9 {
			charStr = charStr + string(s[i])
		}
	}
	if len(charStr) <= 1 {
		return true
	}

	ignoreCaseStr := strings.ToLower(charStr)
	for i := 0; i <= len(ignoreCaseStr)/2; i++ {
		if ignoreCaseStr[i] != ignoreCaseStr[len(ignoreCaseStr)-1-i] {
			return false
		}
	}
	return true
}
